Databaze Firebird a indexy

Otázka od: Kopac Jan Bc.

11. 5. 2004 8:59

 Dobry den,

mam dotaz:

mam tabulku s nekolika sloupci. Ani jeden sloupec vsak neobsahuje unikatni
polozky. Nesmim polozky v tabulce menit.
Jak mam vytvorit primarni klic. Mam pridat dalsi sloupec,do ktereho vlozim
unikatni polozky( treba cisla 1-n), nebo nemam vytvaret
zadny primarni index a pouzit generator a trigger?

Tabulka neni s nicim propojena, ale nevim jestli do budoucna nebude...

p.s.: byl jsem o to pozadan, ale v teto problematice se moc nevyznam...

      dekuji za kazdy postreh...





Odpovedá: Slavomir Skopalik

11. 5. 2004 9:28

> mam tabulku s nekolika sloupci. Ani jeden sloupec vsak
> neobsahuje unikatni polozky. Nesmim polozky v tabulce menit.

To je sice hezke, ale jak pak identifikujes konretni zaznam ?

> Jak mam vytvorit primarni klic. Mam pridat dalsi sloupec,do
> ktereho vlozim unikatni polozky( treba cisla 1-n), nebo nemam
> vytvaret zadny primarni index a pouzit generator a trigger?

Tohle neni zalezitost programovani, ale navrhu, tj. musis
si ujasnit co od te tabulky ocekavas.
Primarni klic by sice mel vzdy existovat, ale v oduvodnitelnych
pripadech lze toto pravidlo porusit.
Primarni klic muze byt i pres vice sloupcu.

 Slavek


Odpovedá: Pavel Cisar

11. 5. 2004 10:54

Haj hou!

On 11 May 2004 at 9:48, Kopac Jan Bc. wrote:

> mam tabulku s nekolika sloupci. Ani jeden sloupec vsak neobsahuje
> unikatni polozky. Nesmim polozky v tabulce menit. Jak mam vytvorit
> primarni klic. Mam pridat dalsi sloupec,do ktereho vlozim unikatni
> polozky( treba cisla 1-n), nebo nemam vytvaret zadny primarni index a
> pouzit generator a trigger?

Pridat unikatni polozku, napr. cislo plnene z generatoru je
jednoduche a zaroven rozumne.

S pozdravem
Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase


Odpovedá: Fedor 'fi0dor' Tirsel

11. 5. 2004 11:43

: Dobry den,

 Zdravim Vas,

: mam tabulku s nekolika sloupci. Ani jeden sloupec vsak neobsahuje unikatni
: polozky. Nesmim polozky v tabulce menit.
: Jak mam vytvorit primarni klic. Mam pridat dalsi sloupec,do ktereho vlozim
: unikatni polozky( treba cisla 1-n), nebo nemam vytvaret
: zadny primarni index a pouzit generator a trigger?
:
: Tabulka neni s nicim propojena, ale nevim jestli do budoucna nebude...
:
: p.s.: byl jsem o to pozadan, ale v teto problematice se moc nevyznam...

Jedna moznost je vytvorit zlozeny primarnu kluc (z viac stlpcov) a dalsia
moznost je vytvorit novy stlpec, kde si budete generatorom (pri vkladani)
nejaku sekvenciu cisiel (1..n). Pokial neviete, ci tabulka nebude do
buducna prepojena s inou, tak by som Vam odporucil radsej si pridat ten novy
stlpec a
generovat si do neho postupnost cisiel (posloupnost) -- nic tim nestratite a
casom mozno ziskate ;)

Priklad:

/* vytvorim novy stlpec */
ALTER TABLE tablename ADD colname INTEGER;

/* vytvorim generator a odpovedajuci trigger */
CREATE GENERATOR gen_colname;

SET GENERATOR gen_colname TO 1;

CREATE TRIGGER colname_autoinc FOR tablename
ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
  IF (NEW.colname is NULL) THEN
    NEW.colname = GEN_ID(gen_colname, 1);
END;

/* vytvorim primarny kluc */
ALTER TABLE tablename ADD CONSTRAINT pk_colname PRIMARY KEY (colname);

S pozdravom...
--
Fedor 'fi0dor' Tirsel
www.fi0dor.info